#! /usr/bin/env python
# -*- coding: utf-8 -*-

import main
import grafos

def pruebas():
    """realiza las pruebas del TP"""
    print "\nPRUEBAS:\n"
    (g,dicc) = prueba_cargar()
    prueba_inaccesibles(g)
    prueba_prim(g)
    prueba_dijstra(g)

def prueba_cargar():
    """Prueba cargar el archivo y generar el grafo"""
    print "Prueba vargar grafo:"
    
    dicc    = main.cargar_dicc("tp3/espias.txt")
    dicc2   = main.cargar_dicc("tp3/servicios.txt")
    g       = main.cargar(dicc,"tp3/canales.txt")

    ok_error ("Cantidad de servicios: \t",len(dicc2) == 3)
    ok_error ("Cantidad de nodos: \t",g.cant_nodos() == 7 and len(dicc) == 7)
    ok_error ("Cantidad de aristas: \t",g.cant_aristas() == 18 )
    return (g,dicc)

def prueba_inaccesibles(g):
    """Prueba de la funcion nodos_inaccesibles"""
    print "\nPrueba inaccesibles:"

    inaccecibles  = g.nodos_inaccesibles(3)
    ok_error ("Nodo generico: \t\t",len(inaccecibles) == 1 and inaccecibles[0] == 7)

    inaccecibles  = g.nodos_inaccesibles(7)
    ok_error ("Nodo aislado: \t\t",len(inaccecibles) == 6)

def prueba_prim(g):
    """Prueba de la obtencion del arbol de tendido minimo"""
    """(el grafo de pruevas es no dirigido)"""
    print "\nPrueba Prim :"
    
    arbol = g.prim(7,0)
    ok_error ("Nodo aislado: \t\t",len(arbol)== 1 and arbol[None] == [7])

    arbol    = g.prim(1,0)
    objetivo = {1: [4, 3], 2: [5], 3: [6], None: [1], 4: [2]} #verificarlo con el grafo del informe
    ok_error ("Nodo generico: \t\t",arbol == objetivo)
    

def prueba_dijstra(g):
    """Prueba la busqueda de camino minimo mediante el algoritmo de dijstra"""
    print "\nPrueba Dijstra:"
    
    directo = g.dijstra(7,2)
    ok_error ("Nodo aislado: \t\t",len(directo) == 1 and directo[7] == None)

    directo  = g.dijstra(5,2)
    objetivo = {1: 2, 2: 5, 3: 4, 4: 5, 5: None, 6: 5} #verificarlo con el grafo del informe
    ok_error ("Nodo generico: \t\t",directo == objetivo)

    dicc     = {}
    dicc[4]  = "marcado"
    dicc[1]  = "marcado"
    directo  = g.dijstra(2,2,dicc)
    objetivo = {1: 2, 2: None, 3: 6, 4: 2, 5: 2, 6: 5} #verificarlo con el grafo del informe
    ok_error ("Ignorando: \t\t",directo == objetivo)   #notar que los ignorados no son dato de nadie
                                                       #osea que no se llega a ningun nodo a partir de ellos	
                        


def ok_error (texto,booleano):
    """si el booleano es 1 la prueba da ok"""
    if (booleano == True):
        print texto+"OK"
    else:
        print texto+"ERROR"   
